#include <iostream>

using namespace std;

// 3 无重复字符的最长子串
// 在一个字符串中寻找没有重复字母的最长子串
//- 如“abcabcbb”，则结果为“abc”。
//- 如“bbbbb”，则结果为“b”。
//- 如“pwwkew”，则结果是“wke”
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int freq[256] = {0};    // 所有的字符出现的频率都为0。因滑动窗口中没有任何值
        int l = 0, r = -1;  // 滑动窗口为 s[l...r]
        int res = 0;    // 满足条件的最长子串的长度

        while(l < s.size()) {
            // 改变滑动窗口
            if(r + 1 < s.size() && freq[s[r+1]] == 0) { // 右边界没有重复字符
                freq[s[++r]]++; // 向右拓展边界 r++; freq[s[r]]++;
            } else {
                freq[s[l++]]--;
                   // 左边界向右 freq[s[l]]--;l++;
            }
            res = max(res, r - l + 1);
        }
        return res;
    }
};

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
